<?php

class admin_menuActions extends sfActions
{
	private  $prueba = null;
	//////////////////////////////////////Meter variable de Sesion en vez del 3
	//////////////////////////
	//////////////////////////
	private $idUsuario=3;
	//////////////////////////
	//////////////////////////
	/////////////////////////////////////////////////////////////////////////////


	private function getPrueba(){
		return $this->prueba;
	}

	private function setPrueba ($valor)
	{
		$this->prueba = $valor;
	}


	public function executeIndex()
	{
		//Aqui se debe pasar como parametro, la variable de sesion
		//que define al usuario en cuestion
		// $this->generarXML($this->idUsuario);


		$this->aux = $this->getPrueba();

		$this->crearRespaldoBaseDatos($this->idUsuario);

		//$this->rutaXsb = "/atenea/web";
	}


	    //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////
      ////////////////////RESPALDAR BASE DE DATOS///////////////////////////////
      //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////
      /////EL nombre del archivo va a ser asi: ////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////

	private  function crearRespaldoBaseDatos($idUsuario)
  	{

		require_once 'database/mysql_backup.class.php';
		$backup_obj = new MySQL_Backup();

		//----------------------- EDIT - REQUIRED SETUP VARIABLES -----------------------

				$arr_config = Propel::getConfiguration();


				$backup_obj->server = $arr_config['datasources']['propel']['connection']['hostspec'];
				$backup_obj->port = 3306;
				$backup_obj->username = $arr_config['datasources']['propel']['connection']['username'];
				$backup_obj->password = $arr_config['datasources']['propel']['connection']['password'];
				$backup_obj->database = $arr_config['datasources']['propel']['connection']['database'];
		/*		$backup_obj->server = 'localhost';
				$backup_obj->port = 3306;
				$backup_obj->username = 'root';
				$backup_obj->password = 'mysql';
				$backup_obj->database = 'bd_atenea';*/

				//print_r($backup_obj);
				//Tables you wish to backup. All tables in the database will be backed up if this array is null.
				$backup_obj->tables = array();

		//------------------------ END - REQUIRED SETUP VARIABLES -----------------------

		//-------------------- OPTIONAL PREFERENCE VARIABLES ---------------------

				//Add DROP TABLE IF EXISTS queries before CREATE TABLE in backup file.
				$backup_obj->drop_tables = true;

				//Only structure of the tables will be backed up if true.
				$backup_obj->struct_only = false;

				//Include comments in backup file if true.
				$backup_obj->comments = true;

				//Directory on the server where the backup file will be placed. Used only if task parameter equals MSB_SAVE.
				$backup_obj->backup_dir = $_SERVER['DOCUMENT_ROOT'].'/resp_base_datos/';

				//Default file name format.
				$backup_obj->fname_format = $idUsuario.'dmY';

		//--------------------- END - OPTIONAL PREFERENCE VARIABLES ---------------------

		//---------------------- EDIT - REQUIRED EXECUTE VARIABLES ----------------------

				/*
					Task:
						MSB_STRING - Return SQL commands as a single output string.
						MSB_SAVE - Create the backup file on the server.
						MSB_DOWNLOAD - Download backup file to the user's computer.

				*/
				$task = MSB_SAVE;

				//Optional name of backup file if using 'MSB_SAVE' or 'MSB_DOWNLOAD'. If nothing is passed, the default file name format will be used.
				$filename = "";

				//Use GZip compression if using 'MSB_SAVE' or 'MSB_DOWNLOAD'?
				$use_gzip = true;

		//--------------------- END - REQUIRED EXECUTE VARIABLES ----------------------

		//-------------------- NO NEED TO ANYTHING BELOW THIS LINE --------------------

		$backup_obj->Execute($task, $filename, $use_gzip);
  }

 //////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////
   //////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////////





	private function generarXML($id_usuario)
	{
		//Estructura inicial del arbol xml
		$dirbase="temp/"; // lo guardamos en la carpeta web
		$nombreArchivo = $dirbase."TEMP_".$id_usuario.".xml";
		$archivoXML = fopen($nombreArchivo,"w+");
		$xml='<?xml version="1.0" encoding="iso-8859-1"?>'."\n";
		$xml.='<tree id="0">'."\n";
		$criterio  = new Criteria();
		$criterio->addAscendingOrderByColumn(MenuSistemaPeer::ID_SUB_MENU);
		$menuSistema = MenuSistemaPeer::doSelect($criterio);
		$copiaMenuSistema = $menuSistema;
		foreach ($menuSistema as $item)
		{
			if($item->getIdSubMenu() == 0)
			{
				$id_aplicacion = "".$item->getId();
				$xml.="\t".'<item open="1" text="'.$item->getNombreMenu().'" id="'.$id_aplicacion.'" im0="book.gif" im1="books_open.gif" im2="book.gif">'."\n";
				//El Id comienza con "APP" por ser el Id de la Aplicacion

				foreach ($copiaMenuSistema as $subItem)
				{
					if($subItem->getIdSubMenu()==$item->getId())
					{
						//El Id comienza con "MOD" por ser el Id del Modulo
						$id_modulo = "".$subItem->getId();
						$xml.="\t\t".'<item open="1" text="'.$subItem->getNombreMenu().'" id="'.$id_modulo.'" im0="book.gif" im1="books_open.gif" im2="book.gif">'."\n";


						//Consulto la tabla Tarea para relacionar dichas acciones a este modulo en particular
						//El Id comienza con "ACT" por ser el Id de la Aacion
						$criterio_2= new Criteria();
						$criterio_2->add(MenuSistemaTareaPeer::MENU_SISTEMA_ID  ,$subItem->getId());
						$acciones=MenuSistemaTareaPeer::doSelect($criterio_2);
						foreach ($acciones as $accion)
						{
							$criterio_3 = new Criteria();
							$criterio_3->add(TareaPeer::ID , $accion->getTareaId());
							$accion_def=TareaPeer::doSelectOne($criterio_3);
							$id_accion = "".$accion_def->getId()."-".$id_modulo."-".$id_aplicacion;
							$xml.="\t\t\t".'<item text="'.$accion_def->getNombreTarea().'" id="'.$id_accion.'" im0="blank.gif" ';

							$criterio_4 = new Criteria();
							$criterio_4->add(MenuSistemaTareaPeer::TAREA_ID, $accion_def->getId());
							$criterio_4->add(MenuSistemaTareaPeer::MENU_SISTEMA_ID , $subItem->getId());
							$accion = MenuSistemaTareaPeer::doSelectOne($criterio_4);


							$criterio_5 = new Criteria();
							$criterio_5->add(UsuarioMenuSistemaTareaPeer::USUARIO_ID ,$this->idUsuario);
							$criterio_5->add(UsuarioMenuSistemaTareaPeer::MENU_SISTEMA_TAREA_ID , $accion->getId());
							$accion_usuario = UsuarioMenuSistemaTareaPeer::doCount($criterio_5);
							//si el usuario actual en sesion posee acciones de este modulos
							//pues colocamos el atributo checked del XMl en 1, sino
							//simplemente no se imprime
							if ($accion_usuario==1){
								$xml.=' checked="1" ';
							}
							$xml.=' > </item>'."\n";

						}
						$xml.="\t\t".'</item>'."\n";
					}
				}
				$xml.="\t".'</item>'."\n";
			}
		}

		$xml.='</tree>';//se termina el arbol
		fputs($archivoXML,$xml);//introducimos el texto del arbol en el archivo xml que creamos

		$this->dibujar_arbol($nombreArchivo);
		fclose($archivoXML);
	}


	private function dibujar_arbol($archivoXML){

		$valor = '<div id="treeboxbox_tree" style="width:400;height:400" align="left"></div>'."\n";
		$valor.='<script>'."\n";
		$valor.='tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0);'."\n";
		$valor.= 'tree.setImagePath("/images/imgs/");'."\n";
		$valor.= 'tree.enableCheckBoxes(1);'."\n";
		$valor.= 'tree.enableThreeStateCheckboxes(true);'."\n";
		$valor.= 'tree.loadXML("/'.$archivoXML.'");'."\n";
		$valor.= 'var list=tree.getAllChecked(); '."\n";
		$valor.= '</script>'."\n";

		$this->setPrueba($valor);
	}

	public function executeGuardar(){
		if ($this->getRequest()->getMethod() != sfRequest::POST)
		{
			// Mostrar el formulario
			return $this->forward('admin_menu', 'index');
		}
		else
		{
			$seleccion = $this->getRequestParameter('seleccion');
			if($seleccion!=null){
				$arrSeleccion = $this->extraerValorSeleccion($seleccion);

				$criterio_ini = new Criteria();
				$criterio_ini->add(UsuarioMenuSistemaTareaPeer::USUARIO_ID , $this->idUsuario);
				$accionesBase = UsuarioMenuSistemaTareaPeer::doSelect($criterio_ini);
				$accionesComparacion = array();
				$i=0;

				foreach ($arrSeleccion as $item)
				{
					$arrAux = split("-",$item);
					$criterio = new Criteria();

					$criterio->add(MenuSistemaTareaPeer::MENU_SISTEMA_ID, $arrAux[1]);
					$criterio->add(MenuSistemaTareaPeer::TAREA_ID , $arrAux[0]);
					$accion = MenuSistemaTareaPeer::doSelectOne($criterio);

					$criterio_2= new Criteria();
					$criterio_2 ->add(UsuarioMenuSistemaTareaPeer::USUARIO_ID , $this->idUsuario);
					$criterio_2 ->add(UsuarioMenuSistemaTareaPeer::MENU_SISTEMA_TAREA_ID , $accion->getId());
					$accion_usuario = UsuarioMenuSistemaTareaPeer::doCount($criterio_2);

					if ($accion_usuario==0) //no existe
					{
						$nuevoMenuSistemaTarea = new UsuarioMenuSistemaTarea();
						$nuevoMenuSistemaTarea->setUsuarioId($this->idUsuario);
						$nuevoMenuSistemaTarea->setMenuSistemaTareaId($accion->getId());
						$nuevoMenuSistemaTarea->save();
					}

					$accionesComparacion[$i]=$accion->getId();
					$i++;
				}


				//comparo los arreglos para ver si se le elimina alguna accion al usuario
				//print_r($accionesComparacion);
				$limit = $i-1;
				foreach ($accionesBase as $base) {
					$encontrado=false;
					$i=0;
					while (($encontrado==false) and ($i<=$limit)) {
						if ($base->getMenuSistemaTareaId() == $accionesComparacion[$i]){
							$encontrado=true;
						}
						else
						{
							$i++;
						}
					}

					if($encontrado==false){
						$conexion = Propel::getConnection();
						$consulta = 'DELETE FROM %s WHERE (%s=%s) and (%s=%s)';
						$consulta = sprintf($consulta, UsuarioMenuSistemaTareaPeer::TABLE_NAME , UsuarioMenuSistemaTareaPeer::USUARIO_ID , $this->idUsuario, UsuarioMenuSistemaTareaPeer::MENU_SISTEMA_TAREA_ID , $base->getMenuSistemaTareaId());
						$sentencia = $conexion->prepareStatement($consulta);
						$resultset = $sentencia->executeQuery();

					}
				}

			}
		}

	}



	/*
		Entrada: cadena -> String
		Salida:	arrFinal -> Array
	*/

	private function extraerValorSeleccion($cadena)
	{
		$i=0;
		$arrFinal=null;
		$arrInicial = split(",",$cadena);
		foreach ($arrInicial as $accion)
		{
			$tieneGuion = strpos($accion,"-");
			if($tieneGuion !== false)
			{
				$arrFinal[$i]=$accion;
				$i++;
			}
		}
		return $arrFinal;
	}

}//DE LA CALSE









